Storage systems enable data and other information to be stored for access by the user. Storage systems include fault tolerant arrays comprised of a number of storage devices, such as disk or tape drives. To insure accuracy of information to be stored or written to the array of storage drives, it is common to initialize the array before the user's data is written to it.
One known way to initialize a storage array is to write zeros to all stripes of the entire storage array. Another known method involves generating parity data for the existing data currently stored on the storage drives. This latter method is identified as a “scrub”. In conducting either of these two initialization methods, significant time is required and, during this time, the user is typically prevented from using the storage array until the initialization process is finished.
With respect to allowing access to the storage array before the initialization is complete, it is known to employ “sure writes” to the storage array that is being scrubbed. In using sure writes, a scrub of the stripe being written must be made before writing the new data to that stripe. This method is slower than using the zero initialization method because the accesses to the storage drives must wait for the parity data to be generated, which involves a number of exclusive or (XOR) operations. Each storage drive is issued a mix of reads and writes and this slows down the initialization process even more. Consequently, it is difficult for the storage drives to optimize access to their storage media. Another disadvantage to using sure writes is that overall system performance becomes lower because resources are being used to implement the XORs.
Because of the drawbacks associated with sure writes, the zero initialization method is preferred. However, it is necessary to devise and implement a procedure by which the storage drives write more efficiently and quickly to their storage media. In that regard, it is noted that storage drives can function more efficiently if they are issued a sufficient number of write commands so that a suitable number of write commands are queued at each of the drives. When one write operation is finished based on one write command, another write operation can immediately be conducted based on the next, queued write command.
Storage drives in the array can be subject to a priority scheme. For example, in using a SCSI bus, each storage device has a SCSI identifier with an assigned priority vis a vis the other drives on this SCSI bus. The higher priority storage drives connected to the same bus have preferred or higher priority access to the bus and will not equally, or substantially equally, share the bus during a zero initialization. The lower priority storage drives will have infrequent ownership of or access to the bus. This results in the higher priority drives finishing their initialization sooner than lower priority drives. When the higher priority drives have finished, only then will the lower priority drives be able to finish. This means that at the end of a zero initialization only a few storage drives will be writing and all other storage drives will be finished. A high bandwidth drive channel is not fully utilized when only a few storage drives are using it. As a consequence, in conducting such a zero initialization, it would take longer and, therefore, is inefficient.
It would be beneficial to initialize a storage array in a reduced amount of time so that the user can more quickly use the storage array in connection with performing write operations. In doing this, it would be advantageous to fully employ the available high bandwidth during all times that the initialization is being performed.